package com.zyl.javabasic.ThreadLocal;

import java.util.HashMap;

/**
 * @author zyl
 * @Description
 * @since 2025/6/23 20:40
 */

public class ThreadLocalBasicExample {
    // 创建一个ThreadLocal变量
    private static final ThreadLocal<Integer> threadLocalValue = ThreadLocal.withInitial(() -> 0);

    /**
     * 打印
     * Thread-1 初始值: 0
     * Thread-0 初始值: 0
     * Thread-2 初始值: 0
     * Thread-0 修改后: 5
     * Thread-1 修改后: 5
     * Thread-2 修改后: 5
     *
     *
     *  每个线程都有自己独立的副本
     *  线程间的修改互不影响
     *  使用后调用remove()清理
     *
     *
     * @param args
     */
    public static void main(String[] args) {
        HashMap hashMap = new HashMap();
        // 创建并启动3个线程
        for (int i = 0; i < 3; i++) {
            new Thread(() -> {
                // 获取当前线程的初始值
                int value = threadLocalValue.get();
                System.out.println(Thread.currentThread().getName() + " 初始值: " + value);

                // 修改值
                value += 5;
                threadLocalValue.set(value);

                System.out.println(Thread.currentThread().getName() + " 修改后: " + threadLocalValue.get());

                // 使用完后清理(重要!)
                threadLocalValue.remove();
            }).start();
        }
    }
}
